package com.prj.ufdm.cloud.ms.auth.bpo._impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.prj.ufdm.cloud.base.util.BaseUuidUtil;
import com.prj.ufdm.cloud.ms.auth.bpo.SysRoleBPO;
import com.prj.ufdm.cloud.ms.auth.dao.SysRoleDao;
import com.prj.ufdm.cloud.ms.auth.dao.SysRoleFunctionDao;
import com.prj.ufdm.cloud.ms.auth.dao.SysUserRoleDao;
import com.prj.ufdm.cloud.ms.auth.model.SysRole;
import com.prj.ufdm.cloud.ms.auth.model.SysRoleFunction;
import com.prj.ufdm.cloud.ms.auth.model.SysUserRole;
import com.prj.ufdm.cloud.ms.core.bpo._impl.BaseBPOImpl;

/**  
 * 系统角色实现类 
 * @author 胡义振  
 * @date 2018年3月27日  
*/
@Service 
public class SysRoleBPOImpl extends BaseBPOImpl<SysRoleDao,SysRole> implements SysRoleBPO {
	
    @Autowired
    private SysRoleDao sysRoleDao;
    
    @Autowired
    private SysRoleFunctionDao sysRoleFunctionDao;
    
    @Autowired
    private SysUserRoleDao sysUserRoleDao;
    
	/**
	 * 根据用户ID删除系统角色
	 * @param id 要删除的角色ID（多个ID，逗号分隔）
	 * @return
	 * @throws Exception
	 * @author 胡义振  
	 * @date 2018年3月27日
	 */
	@Override
	public Integer doRmSysRoleById(String roleIds) throws Exception {
		if (roleIds == null)  roleIds = "";
		String[] arrRoleId = roleIds.split(",");
		for(String roleId : arrRoleId){
			// 删除角色-功能表中的对应关系
			sysRoleFunctionDao.deleteRoleFunctionByRoleId(roleId);
			// 删除用户-角色中的对应关系
			sysUserRoleDao.deleteUserRoleByRoleId(roleId);
			// 删除角色表
			sysRoleDao.deleteById(roleId);
		}
		return arrRoleId.length;
	}

	/**
	 * 根据用户ID查询用户角色
	 * @param userId 用户ID
	 * @return
	 * @throws Exception
	 * @author 胡义振  
	 * @date 2018年3月27日
	 */
	@Override
	public List<SysRole> doGetSysRoleListByUserId(String userId) throws Exception {
		return sysRoleDao.selectRoleListByUserId(userId);
	}
    
	/**
	 * 在角色中添加功能
	 * @param 
	 *      roleId      角色ID
	 *      functionIds 功能ID（多个用","号分隔）
	 * @return
	 * @author 胡义振  
	 * @date 2018年3月26日
	 */
	public Integer doAddRoleFunction(String roleId,String functionIds) throws Exception {
		if (functionIds == null)  functionIds = "";
		// 删除角色ID下所有功能
		sysRoleFunctionDao.deleteRoleFunctionByRoleId(roleId);
		String[] arrFunctionId = functionIds.split(",");
		for(String functionId : arrFunctionId){
			SysRoleFunction sysRoleFunction = new SysRoleFunction();
			sysRoleFunction.setId(BaseUuidUtil.getUUID());
			sysRoleFunction.setRoleId(roleId);
			sysRoleFunction.setFunctionId(functionId);
			sysRoleFunctionDao.insertOne(sysRoleFunction);
		}
		return arrFunctionId.length;
	}
	
	/**
	 * 在角色中添加用户
	 * @param 
	 *      roleId       角色ID
	 *      userIds      用户ID（多个用","号分隔）
	 * @return
	 * @author 胡义振  
	 * @date 2018年3月26日
	 */
	public Integer doAddRoleSysUser(String roleId,String userIds) throws Exception {
		if (userIds == null)  userIds = "";
		// 		// 先删除，防止重复数据
		doRmRoleUser(roleId,userIds);
		String[] arrUserId = userIds.split(",");
		for(String userId : arrUserId){
			SysUserRole sysUserRole = new SysUserRole();
			sysUserRole.setId(BaseUuidUtil.getUUID());
			sysUserRole.setRoleId(roleId);
			sysUserRole.setUserId(userId);
			sysUserRoleDao.insertOne(sysUserRole);
		}
		return arrUserId.length;
	}
	
	/**
	 * 删除角色中的用户
	 * @param 
	 *      roleId      角色ID
	 *      userIds     用户ID（多个用","号分隔）
	 * @return
	 * @author 胡义振  
	 * @date 2018年3月26日
	 */
	public Integer doRmRoleUser(String roleId,String userIds) throws Exception{
		if (userIds == null)  userIds = "";
		String[] arrUserId = userIds.split(",");
		for(String userId : arrUserId){
			SysUserRole sysUserRole = new SysUserRole();
			sysUserRole.setId(BaseUuidUtil.getUUID());
			sysUserRole.setRoleId(roleId);
			sysUserRole.setUserId(userId);
			sysUserRoleDao.deleteUserRoleByUserIdAndRoleId(sysUserRole);
		}
		return arrUserId.length;
	}

	/**
	 * 检查角色名是否存在
	 * 
	 * @param roleName
	 * @param roleId
	 * @return
	 * @throws Exception
	 */
	public boolean doCheckSysRoleNameExist(String roleName, String roleId) throws Exception {
		// TODO Auto-generated method stub
		SysRole sysRole = new SysRole();
		sysRole.setRoleName(roleName);
		//检测新增用户的登录名
		if(roleId!=null && !roleId.equals("")){
			sysRole.setId(roleId);
		}
		Integer searchCount = sysRoleDao.selectSysRoleForCheckRoleName(sysRole);
		if(searchCount!=null && searchCount>0){
			return true;
		}
		return false;
	}
    
}
